// 通过网页显示 文件或者是目录
const http = require("http");
const fs = require("fs");
const url = require("url");

function removeDir (src) {
  // 先删除src里的文件
  // 读取src里的内容
  let arr = fs.readdirSync(src);
  // 先判断里面是文件还目录，如果是文件就删掉
  // 如何判断是一个文件注意路径需要拼接
  arr.forEach(item => {
    // item ----->  1.txt  和 2.txt
    // 判断是否是一个文件 ，如果是文件就删除；
    let url = src + "/" + item;
    let stat = fs.statSync(url); // 获取  ./mydir/1.txt 和  ./mydir/2.txt的详细信息
    // 通过详细信息判断是否是一个文件
    if (stat.isFile()) {
      // 是一个文件就把文件删除
      fs.unlinkSync(url);
    } else {
      // 是一个目录
      removeDir(url);
    }
  })
  // 文件删除后再删除外层目录
  fs.rmdirSync(src);
}

let server = http.createServer((res, req) => {
  res.setHeader("content-type", "text/html;charset=utf-8");

  // 接收path参数
  let query = url.parse(req.url, true).query;
  // 通过del参数判断是否需要删除内容
  if (typeof query.del !== "undefined") {
    // 证明有这个参数 ，那么需要删除这个参数里的路径
    // 判断是否被删除 ，如果没有删除 ，才删除内容
    if (fs.existsSync(query.del)) {
      // 区分是文件还是目录
      let stat = fs.statSync(query.del);
      if (stat.isFile()) {
        // 针对文件的删除
        fs.unlinkSync(query.del);
      } else {
        // 是一个目录
        removeDir(query.del);
      }
    }
  }
  let myurl;
  if (typeof query.path !== "undefined") {
    myurl = query.path;
  } else {
    myurl = "." //获取同级的文件或是目录
  }
  let arr = fs.readdirSync(myurl);
  let tableStr = "<table><tr><th>文件名</th><th>操作</th></tr>";
  arr.forEach(item => {
    // 判断，如果是目录，那么给a链接跳转；
    let resurl = myurl + "/" + item;
    let stat = fs.statSync(resurl);
    if (stat.isDirectory()) { // 如果是目录
      tableStr += `<tr><td><a href="/?path=${resurl}">${item}</a></td><td><a href="/?del=${resurl}">删除</a></td></tr>`;
    } else {
      // 是文件
      tableStr += `<tr><td>${item}</td><td><a href="/?del=${resurl}">删除</a></td></tr>`;
    }
  })
  tableStr += "</table>";
  res.write(tableStr);
  res.end();
})

server.listen(8080);